package org.ala.tcp_feign_client;

import java.util.function.Consumer;

import org.ala.tcp_feign_common.exceptions.ActiveException;
import org.ala.tcp_feign_common.exceptions.LoginException;
import org.ala.tcp_feign_common.msg.AbstractByteMessage;
import org.ala.tcp_feign_common.msg.biz_resp.BizRespByteMessage;

/**
 * tcp-feign客户端
 *
 * @author 骆毅(ala)
 * @date 2024年4月19日
 */
public interface ITcpFeignClient {
	
	
	/**
	 * 远程主机信息host
	 */
	String host();
	/**
	 * 远程主机port
	 */
	int port();
	/**
	 * 后缀
	 */
	String suffix();
	/**
	 * 登录用户名
	 */
	String username();
	/**
	 * 登录密码
	 */
	String password();
	
	
	/**
	 * 连接服务端
	 * <p>	这里不区分appName，只认host + port
	 */
	void connect() throws Exception;
	/**
	 * 绑定登录回调
	 */
	void bindLoginCallback(Consumer<ITcpFeignClient> loginCallback);
	/**
	 * 绑定msgId回调
	 */
	void bindBizRespCallback(Consumer<BizRespByteMessage> respCallback);
	
	
	/**
	 * 关闭连接
	 */
	void close();
	/**
	 * 链接是否有效
	 * <p>	3此握手成功
	 */
	boolean isActive();
	/**
	 * 链接是否登录
	 * <p>	3次握手成功，并且成功登录
	 */
	int isLogin();
	/**
	 * 3次握手时间戳
	 */
	long connectTimestamp();
	
	
	/**
	 * 发消息
	 */
	void send(AbstractByteMessage msg) throws ActiveException, LoginException;
	/**
	 * 发消息
	 */
	void sendLogin(String username, String password) throws ActiveException;
}
